package com.zbkj.service.sfexpress.order;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

@Data
public class ExpReceUpdateOrder {

    @ApiModelProperty(value = "客户订单号", required = true)
    private String orderId;

    @ApiModelProperty(value = "客户订单操作标识: 1:确认 (丰桥下订单接口默认自动确认，不需客户重复确认，该操作用在其它非自动确认的场景) 2:取消", required = false)
    private int dealType;

    @ApiModelProperty(value = "顺丰运单号(如dealtype=1， 必填)", required = false)
    private List<WaybillNoInfo> waybillNoInfoList;

    @ApiModelProperty(value = "报关批次", required = false)
    private String customsBatchs;

    @ApiModelProperty(value = "揽收员工号", required = false)
    private String collectEmpCode;

    @ApiModelProperty(value = "头程运单号", required = false)
    private String inProcessWaybillNo;

    @ApiModelProperty(value = "原寄地网点代码", required = false)
    private String sourceZoneCode;

    @ApiModelProperty(value = "目的地网点代码", required = false)
    private String destZoneCode;

    @ApiModelProperty(value = "订单货物总重量，包含子母 件，单位千克，精确到小数点 后3位，如果提供此值，必 须>0", required = false)
    private double totalWeight;

    @ApiModelProperty(value = "订单货物总体积，单位立方厘 米，精确到小数点后3位，会 用于计抛（是否计抛具体商务 沟通中双方约定）", required = false)
    private double totalVolume;

    @ApiModelProperty(value = "快件产品类别，支持附录《快 件产品类别表》的产品编码 值，仅可使用与顺丰销售约定 的快件产品", required = false)
    private int expressTypeId;

    @ApiModelProperty(value = "扩展属性", required = false)
    private List<ExtraInfo> extraInfoList;

    @ApiModelProperty(value = "客户订单货物总长，单位厘米， 精确到小数点后3位，包含子 母件", required = false)
    private double totalLength;

    @ApiModelProperty(value = "客户订单货物总宽，单位厘米， 精确到小数点后3位，包含子 母件", required = false)
    private double totalWidth;

    @ApiModelProperty(value = "客户订单货物总高，单位厘米， 精确到小数点后3位，包含子 母件", required = false)
    private double totalHeight;

    @ApiModelProperty(value = "增值服务信息", required = false)
    private List<Service> serviceList;

    @ApiModelProperty(value = "是否走新通用确认1：支持修改联系人 2：支持改其他客户订单默认0", required = false)
    private int isConfirmNew;

    @ApiModelProperty(value = "收件人信息", required = false)
    private OrderContactInfoDto destContactInfo;

    @ApiModelProperty(value = "是否通过手持终端通知顺丰收派员上门收件， 支持以下值：1：要求其它为不要求", required = false)
    private int isDocall;

    @ApiModelProperty(value = "1. 特殊派送类型代码 身份验证 2. 极效前置单", required = false)
    private String specialDeliveryTypeCode;

    @ApiModelProperty(value = "1> 特殊派件具体表述 证件类型:证件后8位 如：1:09296231（1表示身份证，暂不支持其他证件） 2>.极效前置单时:Y:若不支持则返回普通运单N:若不支持则返回错误码", required = false)
    private String specialDeliveryValue;

    @ApiModelProperty(value = "预约时间(上门揽收时间)", required = false)
    private LocalDateTime sendStartTm;

    @ApiModelProperty(value = "上门揽收截止时间", required = false)
    private ApiModelProperty pickupAppointEndtime;

    @Data
    public static class WaybillNoInfo {
        @ApiModelProperty(value = "运单号类型 1：母单 2 :子单 3 : 签回单", required = false)
        private int waybillType;

        @ApiModelProperty(value = "运单号", required = false)
        private String waybillNo;

        @ApiModelProperty(value = "箱号", required = false)
        private String boxNo;

        @ApiModelProperty(value = "长", required = false)
        private double length;

        @ApiModelProperty(value = "宽", required = false)
        private double width;

        @ApiModelProperty(value = "高", required = false)
        private double height;

        @ApiModelProperty(value = "体积（立方厘米）", required = false)
        private double volume;

        // Getters and setters
    }

    @Data
    public static class ExtraInfo {
        @ApiModelProperty(value = "扩展字段 说明", required = false)
        private String attrName;

        @ApiModelProperty(value = "扩展字段值", required = false)
        private String attrVal;

        // Getters and setters
    }

    @Data
    public static class OrderContactInfoDto {
        @ApiModelProperty(value = "公司名称", required = false)
        private String company;

        @ApiModelProperty(value = "联系人", required = false)
        private String contact;

        @ApiModelProperty(value = "联系电话", required = false)
        private String tel;

        @ApiModelProperty(value = "方手机", required = false)
        private String mobile;

        @ApiModelProperty(value = "国家或地区 2位代码参照附录国家代码附件", required = true)
        private String country;

        @ApiModelProperty(value = "所在省级行政区名称如：北京、广东省、广西壮族自治区等", required = false)
        private String province;

        @ApiModelProperty(value = "所在地级行政区名称，必须是标准的城市称谓 如：北京市、深圳市、大理白族自治州等", required = false)
        private String city;

        @ApiModelProperty(value = "所在县/区级行政区名称，必须是标准的县/区称谓，如：福田区", required = false)
        private String county;

        @ApiModelProperty(value = "详细地址，若province/city字段的值不传，此字段必须包含省市", required = false)
        private String address;

        // Getters and setters
    }

    @Data
    public static class Service {
        @ApiModelProperty(value = "增值服务名，如COD等", required = true)
        private String name;

        @ApiModelProperty(value = "增值服务扩展属性，参考增值 服务传值说明", required = false)
        private String value;

        @ApiModelProperty(value = "增值服务扩展属性1", required = false)
        private String value1;

        @ApiModelProperty(value = "增值服务扩展属性2", required = false)
        private String value2;

        @ApiModelProperty(value = "增值服务扩展属性3", required = false)
        private String value3;

        @ApiModelProperty(value = "增值服务扩展属性4", required = false)
        private String value4;

        // Getters and setters
    }
}




